package com.homestead.domain.dos;

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.stream.Stream;

/**
 * @author HanBin_Yang
 * @since 2021/5/30 8:59
 */
@Getter
@Setter
public class CouponThemeCache {
    private static final long serialVersionUID = -6037607120780322210L;
    /**
     * 券主题id
     */
    @NotNull
    private Long id;
    /**
     * 券发放规则 1活动规则券 4前台领券，17主动营销 18权益优惠券 19线下预制券 20媒体广告券 21直播券 22营销活动页券
     */
    private Integer couponGiveRule;

    /**
     * 每ID总共可以领取张数
     */
    private Integer individualLimit;

    /**
     * 每ID每日可以领取张数
     */
    private Integer everyDayLimit;

    /**
     * 每个ID每月可以领取张数
     */
    private Integer everyMonthLimit;

    /**
     * 券主题名称
     */
    private String themeTitle;

    /**
     * 券名称
     */
    private String couponName;

    /**
     * 券码生成方式 0自动生成 1第三方券码
     */
    private Integer couponType;

    /**
     * 适用组织类型 0平台券 1集团券 2商家券 3店铺券
     */
    private Integer adaptOrgType;

    /**
     * 优惠方式 1金额 2折扣 3福利卡 4红包券
     */
    private Integer couponDiscountType;

    /**
     * 优惠券面值 折扣/价值 折扣则*100转换成整数
     */
    private Integer couponAmount;

    /**
     * 折扣上限(元)
     */
    private BigDecimal discountLimitAmount;

    /**
     * 现有库存量
     */
    private Integer stock;

    /**
     * 发行总量
     */
    private Integer totalLimit;

    /**
     * 活动开始时间
     */
    private Date startTime;

    /**
     * 活动结束时间
     */
    private Date endTime;

    /**
     * 使用说明
     */
    private String useDesc;

    /**
     * 发布人群 0是会员 1是机构经纪人 2是C端用户
     */
    private Integer pubPorts;

    /**
     * 券码有效期类型  1固定有效期，2自用户领取几天后失效
     */
    private Integer couponValidityType;

    /**
     * 固定有效期开始时间
     */
    private Date validityStartTime;

    /**
     * 固定有效期结束时间
     */
    private Date validityEndTime;

    /**
     * 自用户领取几天后失效
     */
    private Integer validityDays;

    /**
     * 使用条件 订单满多少元可用
     */
    private BigDecimal useLimitAmount;

    /**
     * 每个订单号每次最多可使用张数
     */
    private Integer orderUseLimit;

    /**
     * 是否可赠送 0否 1是
     */
    private Boolean canGiving;

    /**
     * 是否可转让 0否 1是
     */
    private Boolean canTransfer;

    /**
     * 活动状态 0未审核 1待审核 2审核不通过 3未开始 4进行中 5已关闭
     */
    private Integer status;

    /**
     * 字段属性的名称
     */
    public enum FIELDS {
        ID("id"),
        COUPON_GIVE_RULE("couponGiveRule"),
        INDIVIDUAL_LIMIT("individualLimit"),
        EVERY_DAY_LIMIT("everyDayLimit"),
        EVERY_MONTH_LIMIT("everyMonthLimit"),
        THEME_TITLE("themeTitle"),
        COUPON_NAME("couponName"),
        COUPON_TYPE("couponType"),
        ADAPT_ORG_TYPE("adaptOrgType"),
        COUPON_DISCOUNT_TYPE("couponDiscountType"),
        COUPON_AMOUNT("couponAmount"),
        DISCOUNT_LIMIT_AMOUNT("discountLimitAmount"),
        STOCK("stock"),
        TOTAL_LIMIT("totalLimit"),
        START_TIME("startTime"),
        END_TIME("endTime"),
        USE_DESC("useDesc"),
        PUB_PORTS("pubPorts"),
        COUPON_VALIDITY_TYPE("couponValidityType"),
        VALIDITY_START_TIME("validityStartTime"),
        VALIDITY_END_TIME("validityEndTime"),
        VALIDITY_DAYS("validityDays"),
        USE_LIMIT_AMOUNT("useLimitAmount"),
        ORDER_USE_LIMIT("orderUseLimit"),
        CAN_GIVING("canGiving"),
        CAN_TRANSFER("canTransfer"),
        STATUS("status"),
        ;

        private String name;

        FIELDS(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        public static FIELDS of(String fieldName) {
            return Stream.of(values())
                    .filter(bean -> bean.getName().equals(fieldName))
                    .findAny()
                    .orElseThrow(() -> new IllegalArgumentException("CouponThemeCache.FIELD字段 [fieldName=" + fieldName + "] 不存在"));
        }
    }

}
